Spring Boot Actuator の info エンドポイントにビルド情報を含める
旬の生魚おじさん、都元です。弊社は本日を最終営業日として、これから冬季休業となります。 今年も一年、どうもありがとうございました。というわけで恒例の書き納め三本締め、その3。
またまた以前のエントリーの掘り返しになりますが、以前「Spring Boot Actuatorによる便利なAPIエンドポイント自動設定」というエントリーを書きました。
現在の最新版である Spring Boot 2.x 系では /actuator/health
など、/actuator
の下に各種エンドポイントが生えます。また、デフォルトでは /actuator/health
と /actuator/info
しか公開されないように変わりました。と、まぁ v2 系のアップデート情報はそこそこにしまして。
で、その中で /actuator/info
というエンドポイントがあるのですが、これはデフォルトでは {}
という無意味な情報しか返しません。ここには、Spring Boot のプロパティ (application.properties
や環境変数等をまとめたもの) で指定した情報などを組み込めるのですが、デフォルトでは何も設定していないので空なのです。
せっかくなので、ここにはアプリケーションのビルド情報が入るようにしてみましょう。
Spring Initializr でプロジェクトを作る
Spring Initializr はご存知でしょうか。Spring Boot のプロジェクト雛形をサクっと作ってくれるやつです。UI からポチポチやってもいいのですが、今回は curl
コマンド一発でプロジェクトを作って起動してみましょう。
余談ですが、世の中ではこの Spring Initializr によって月間に 100 万回のプロジェクト生成が行われているようです。すげえ。
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,actuator \ -d type=gradle-project \ -d baseDir=cm-boot-demo | tar -xzvf - $ cd cm-boot-demo $ git init && git add --all && git commit -m'Initial commit' $ ./gradlew bootRun (略) 2019-12-19 16:10:14.343 INFO 69748 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-12-19 16:10:14.345 INFO 69748 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 2.722 seconds (JVM running for 3.065) <=========----> 75% EXECUTING [25s] > :bootRun
ここまで 1 分です。すごい。別のターミナルで /actuator/info
を叩いてみましょう。
$ curl -s http://localhost:8080/actuator/info | jq . {}
空っぽですね。
Actuator の info エンドポイントにビルド情報を組み込む
はい、これも一瞬です。 build.gradle
に次の 3 行を追記してください。以上。
springBoot { buildInfo() }
アプリケーションを再起動 (./gradlew bootRun
) して info エンドポイントを叩くと…。
$ curl -s http://localhost:8080/actuator/info | jq . { "build": { "version": "0.0.1-SNAPSHOT", "artifact": "demo", "name": "demo", "group": "com.example", "time": "2019-12-19T07:16:32.427Z" } }
こんな感じです。いいですね!
これに加えて Git のコミット情報も組み込む
Git のコミットハッシュや、コミットタイムスタンプも info で参照できるといいですね。ということでやってみます。 これには com.gorylenko.gradle-git-properties という Gradle プラグインを利用します。
plugins { // 略 id 'com.gorylenko.gradle-git-properties' version '2.0.0' }
はい、plugins
ブロックに 1 行追加するだけです。
アプリケーションを再起動 (./gradlew bootRun
) して info エンドポイントを叩いてみましょう。
curl -s http://localhost:8080/actuator/info | jq . { "git": { "commit": { "time": "2019-12-19T07:14:09Z", "id": "8f7ad5e" }, "branch": "master" }, "build": { "version": "0.0.1-SNAPSHOT", "artifact": "demo", "name": "demo", "group": "com.example", "time": "2019-12-19T07:17:43.821Z" } }
まとめ
さらに Gradle でバージョンを自動的に付ける (2020 年版) の仕組みも加えれば、.build.version
がリッチになり、さらに運用しやすくなるかもしれません。
ではみなさま、良いお年を。